class Instruccion:
###############################################################################################################
    #INICIALIZACION

    #constantes para determinar el tipo de instruccion
    CPU = 0
    IO = 1
    EXIT = 2
    
    #constructor
    def __init__(self, tipoOp=CPU, cantVeces=0):
        self.tipoInstruccion = tipoOp
        self.cantVeces = cantVeces
     
###############################################################################################################

    #METODOS
    def expandirInstruccionCpu(self):
        # Expande una cantidad de veces fija, la instruccion CPU
        lista =[]
        while self.cantVeces>0:
            lista.append(Instruccion(0,0))
            self.cantVeces = self.cantVeces -1
        return lista
    
    def expandirInstruccionIo(self):
        # Expande una cantidad de veces fija, la instruccion IO
        lista =[]
        while self.cantVeces>0:
            lista.append(Instruccion(1,0))
            self.cantVeces = self.cantVeces -1
        return lista
    
    def expandirInstruccion(self):
        # Expande instrucciones (CPU o IO) una cantidad de veces
        if self.tipoInstruccion ==  Instruccion.CPU:
            return self.expandirInstruccionCpu()
        elif self.tipoInstruccion == Instruccion.IO:
            return self.expandirInstruccionIo()
        else:
            return [self]

    #to print
    def __repr__(self):
        if self.tipoInstruccion == Instruccion.CPU:
            return 'CPU '
        elif self.tipoInstruccion == Instruccion.IO:
            return 'IO ' 
        elif self.tipoInstruccion == Instruccion.EXIT:
            return 'EXIT' 